﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using Onshi.POS.AccesoDatos;
using Onshi.POS.AccesoDatos.Interfaces;
using Onshi.POS.Modelo.Entidades.Tipos;

namespace Onshi.POS.Repositorios
{
    public abstract class RepositorioTipo<TEntidadTipo> : RepositorioBase<TEntidadTipo, Byte>
        where TEntidadTipo : TipoBase, new()
    {
        #region Constructores

        public RepositorioTipo()
            : base()
        {
            servicioDatosTipo = new ServicioDatosTipo();
        }

        #endregion

        #region Atributo

        protected static List<TEntidadTipo> entidades;
        private IServicioDatosTipo servicioDatosTipo;

        #endregion

        #region Propiedades

        internal IServicioDatosTipo ServicioDatosTipo
        {
            get { return servicioDatosTipo; }
        }

        #endregion

        #region Metodos

        public abstract List<TEntidadTipo> DevolverTodos();

        public TEntidadTipo DevolverPorId(Byte id)
        {
            if (entidades == null)
                entidades = DevolverTodos();
            return entidades.Where(x => x.Id == id).FirstOrDefault();
        }

        protected override TEntidadTipo FilaAEntidad(DataRow fila)
        {
            var entidad = new TEntidadTipo();
            entidad.Id = (Byte)fila[0];
            entidad.Nombre = (String)fila[1];
            return entidad;
        }

        #endregion
    }
}